package com.base.dao;

import java.util.List;

/**
 * 将常用sql查询方式放入该接口中，以后所有dao层接口都继承它
 * @param <T>
 * @param <PK>
 */
public interface TemplateDao<T,PK> {
	/**
	 * 根据主键获取实体。如果没有相应的实体，返回 null。
	 * @param id
	 * @return
	 */
	public T get(PK id);
	
	/**
	 * 更新实体
	 * @param entity
	 */
	public void update(T entity);
	
	/**
	 * 根据属性名更新特定的字段,properties和columns字段长度要求一致
	 * @param project 要更新的实体
	 * @param properties 属性字段 区分大小小
	 */
	public void updateByBeanProperty(T entity,List<String> properties);
	
	/**
	 * 更新去掉properties中属性的其余属性
	 * @param project 要更新的实体
	 * @param properties 不更新的属性字段 区分大小小
	 */
	public void updateExceptProperty(T entity,List<String> properties);
	
	/**
	 * 保存实体返回id(主键自增的时候使用)
	 * @param entity
	 * @return
	 */
	public PK saveReturnId(T entity);
	
	
	/**
	 * 保存实体返回id（PK只有int类型，没有其他类型）；
	 * @param entity
	 * @return
	 */
	public Integer saveReturnIntId(T entity);
	
	/**
	 * 保存实体返回id（故障中用到machinebreakdowninstance）；
	 * @param entity
	 * @return
	 */
	public Long saveReturnLongId(T entity);
	
	/**
	 * 保存实体(主键用户指定时使用)
	 * @param entity
	 */
	public void save(T entity);
	
	/**
	 * 删除实体
	 * @param entity
	 */
	public void delete(PK id);
	
	/**
	 * 查询所有实体
	 * @return
	 */
	public List<T> findAll();
}
